由於我們的Linebot是跑在AWS Lambda上的,而Lambda是無狀態的serverless服務,當Lambda被觸發後,只要經過一段時間的閒置,虛擬機就會被關閉,也就是說沒有辦法在Lambda上面長期存儲資料,所以我們將可能需要儲存的放到DynamoDB裡面。
首先還是要讓Lambda有權限去調用DynamoDB,我們一樣點進我們創好的Lambda,從組態的許可下,能看見執行角色,按進去新增權限
輸入DynamoDB搜尋,找到AmazonDynamoDBFullAccess
打勾後新增權限,這樣就可以了
但我們不可能每次本機端測試的時候,都連線到AWS去操作DynamoDB,因此需要一個離線版本的架在自己的電腦上,AWS提供了一些方法,這邊我們選擇使用比較平易近人的docker-compose的方式直接拉起來。
以下就可以建立一個簡單跑在8000port的Local Dynamodb了
version: "3.8"
services:
dynamodb-local:
command: "-jar DynamoDBLocal.jar -sharedDb -dbPath ./data"
image: "amazon/dynamodb-local:latest"
container_name: dynamodb-local
ports:
- "8000:8000"
volumes:
- "./docker/dynamodb:/home/dynamodblocal/data"
working_dir: /home/dynamodblocal
但是由於這是純的dynamodb,所以並不像在AWS上那樣有GUI可以操作,為了方便開發的時候能看一下資料,我們使用這個開源專案所提供的GUI,接著讓我們更新一下docker-compose.yaml
version: "3.8"
services:
dynamodb-local:
command: "-jar DynamoDBLocal.jar -sharedDb -dbPath ./data"
image: "amazon/dynamodb-local:latest"
container_name: dynamodb-local
ports:
- "8000:8000"
volumes:
- "./docker/dynamodb:/home/dynamodblocal/data"
working_dir: /home/dynamodblocal
dynamodb-admin:
image: aaronshaf/dynamodb-admin
ports:
- "8001:8001"
environment:
DYNAMO_ENDPOINT: "http://dynamodb-local:8000"
AWS_REGION: "ap-northeast-1"
AWS_ACCESS_KEY_ID: dummy
AWS_SECRET_ACCESS_KEY: dummy
depends_on:
- dynamodb-local
補上dynamodb-admin,讓環境變數中的DYNAMO_ENDPOINT
指定到dynamodb的服務,也就是dynamodb-local的8000port,這樣就沒問題了
接著docker-compose up -d
後,打開http://localhost:8001/ ,就可以看到GUI了~
到此DynamoDB的設定就都好了,我們明天寫點code來測試看看,那我們明天見~